#include "tool.h"
string dir[]={"东","西"};
//单行道管程条件变量类
class Condition{
	public:
		Condition(Sema *sema1,Sema *sema2);
		~Condition();
		void Wait(Lock *conditionLock,int direc);//过路条件不足时阻塞
		void Signal(int direc);//唤醒相反方向阻塞车辆
	private:
		Sema* queue1;	//一个方向阻塞队列
		Sema* queue2;	//另一个方向阻塞队列
		//Lock* lock;	//进入管程时获取的锁
};
//单行道管程类
class OneWay{
	public:
		OneWay(int maxC);
		~OneWay();
		void Arrive(int direc);//车辆准备上单行道，direc为行车方向
		void Cross(int direc);//车辆正在单行道上
		void Quit(int direc);//车辆通过了单行道
	private:
		int rate;	//车速
		int *maxCars;	//最大同向车数
		int *numCars;//当前正在通过的车辆数
		int *currentDirec;//当前通过的车辆的方向
		Condition *OneWayFull;//通过单行道的条件变量
		Lock * lock;//单行道管程锁
};

